﻿/**
 * 复选框分组，提供了根据 store 显示 items 的功能。
 */
Ext.define('Happy.form.CheckboxGroup', {
    extend: 'Ext.form.CheckboxGroup',
    alias: 'widget.happy-checkboxgroup',
    requires: ['Happy.form.field.Checkbox'],

    /**
     * @cfg 重写 ExtJs。
     */
    defaultType: 'happy-checkbox',
    /**
     * @cfg 重写 ExtJs。
     */
    columns: 5,
    /**
     * @cfg 显示字段。
     */
    boxLabelField: 'Name',
    /**
     * @cfg 值字段。
     */
    inputValueField: 'Id',

    /**
     * 重写 ExtJs。
     */
    setValue: function (value) {
        var me = this;

        if (Ext.isArray(value)) {
            var temp = {};
            temp[me.getName()] = value;
            value = temp;
        }

        me.callParent([value]);

        me.value = value;
    },

    /**
     * 重写 ExtJs。
     * 
     * @protected
     */
    onRender: function () {
        var me = this;

        me.callParent(arguments);

        me.rendItemsWithStore();
    },

    /**
     * 使用 store 配置 items。
     * 
     * @protected
     */
    rendItemsWithStore: function () {
        var me = this;

        if (!me.store && me.storeConfig) {
            me.store = Ext.create(me.storeConfig.type, me.storeConfig || {});
        }

        if (!me.store) {
            return;
        }

        if (me.store.getCount() > 0) {
            me.rendItemsWithLoadedStore(me.store);
        }
        else {
            me.store.on('load', function () {
                me.rendItemsWithLoadedStore(me.store);
            });
        }
    },

    /**
     * 使用 store 配置 items。
     * 
     * @private
     */
    rendItemsWithLoadedStore: function (store) {
        var me = this;

        var items = [];
        me.store.each(function (record) {
            items.push({
                name: me.getName(),
                boxLabel: record.get(me.boxLabelField),
                inputValue: record.get(me.inputValueField),
                useInputValueAsModelData: true,
                isModelDataArray: true
            });
        });
        me.add(items);

        me.setValue(me.value);
    }
});